import dayjs from 'dayjs'

/**
 * 将任意时间格式转换为千分位时间戳
 *
 * @param {string|number|Date} input - 输入的时间（可以是时间戳、日期字符串或Date对象）
 * @returns {number} 千分位时间戳
 */
export function toTimestamp(input: any): number {
  // 如果输入已经是数字时间戳
  if (typeof input === 'number') {
    // 检查是否是秒级时间戳（10位）
    if (input.toString().length === 10) {
      return input * 1000
    }
    // 检查是否是毫秒级时间戳（13位）
    if (input.toString().length === 13) {
      return input
    }
  }

  // 处理字符串或Date对象
  return dayjs(input).valueOf()
}
/**
 * 生成随机密码
 *
 * @param options 配置选项
 * @returns 生成的随机密码
 */
export function genRandomPassword(options?: {
  length?: number
  includeNumbers?: boolean
  includeLowercase?: boolean
  includeUppercase?: boolean
  includeSymbols?: boolean
}): string {
  // 默认配置
  const {
    length = 12,
    includeNumbers = true,
    includeLowercase = true,
    includeUppercase = true,
    includeSymbols = true,
  } = options || {}

  // 字符集
  const numbers = '0123456789'
  const lowercase = 'abcdefghijklmnopqrstuvwxyz'
  const uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  const symbols = '!@#$%^&*()_+-=[]{}|;:,.<>?'

  // 根据配置构建可用字符集
  let charset = ''
  if (includeNumbers) charset += numbers
  if (includeLowercase) charset += lowercase
  if (includeUppercase) charset += uppercase
  if (includeSymbols) charset += symbols

  // 如果没有选择任何字符类型，则使用所有类型
  if (charset.length === 0) {
    charset = numbers + lowercase + uppercase + symbols
  }

  // 生成密码
  let password = ''
  const charsetLength = charset.length
  const crypto = window.crypto || (window as any).msCrypto // 兼容IE

  if (crypto?.getRandomValues) {
    // 使用更安全的加密API
    const values = new Uint32Array(length)
    crypto.getRandomValues(values)
    for (let i = 0; i < length; i++) {
      password += charset[values[i] % charsetLength]
    }
  } else {
    // 回退到Math.random (不够安全，但兼容性更好)
    for (let i = 0; i < length; i++) {
      password += charset[Math.floor(Math.random() * charsetLength)]
    }
  }

  return password
}
